//如果一个数 p 是个质数，同时又是整数 a 的约数，则 p 称为 a 的一个质因数。

//请问， 2024 的最大的质因数是多少？


    // for(int i=2024;i>0;--i)
    // {
    //     if(i%2==1 && 2024%i==0)
    //     {
    //     cout<<i<<endl;
        
    //     break;
    //     }
    // }
    //对于两个整数 a, b，既是 a 的整数倍又是 b 的整数倍的数称为 a 和 b 的公倍数。公倍数中最小的正整数称为 a 和 b 的最小公倍数。

//请问， 2024 和 1024 的最小公倍数是多少？
    // for(int i=1024;;++i)
    // {
    //     if(i%1024==0 && i%2024==0)
    //     {
    //         cout<<i<<endl;
    //         break;
    //     }
    // }
// 如果一个数 p 是个质数，同时又是整数 a 的约数，则 p 称为 a 的一个质因数。

// 请问， 2024 的所有质因数的和是多少？

    // int sum=0;
    // for(int i=2024;i>0;--i)
    // {
    //     if((i%2==1) && (2024%i==0))
    //     {
    //         sum+=i;
    //     }
        
    // }
    // cout<<sum<<endl;
    //请问，在不超过 2024 的数中，最大的质数是多少？
    
   
    // long long n, m, a;  // 使用long long防止乘法溢出
    
    // // 输入长、宽和每平方米产量
    // std::cout << "请输入玉米地的长(米)：";
    // std::cin >> n;
    // std::cout << "请输入玉米地的宽(米)：";
    // std::cin >> m;
    // std::cout << "请输入每平方米产量(千克)：";
    // std::cin >> a;
    
    // // 计算总产量
    // long long total = n * m * a;
    
    // std::cout << "玉米地总产量为：" << total << "千克" << std::endl;
//     小蓝有一个数组 a[1], a[2], ..., a[n]， 一个“再创新高”的位置是指一个位置 p ，a[p] 的值比之前每个位置的值都大。

// 请求出小蓝的数组中有多少个再创新高的位置。

//     #include <iostream>
// #include <vector>

// int countNewHighs(const std::vector<int>& a) {
//     if (a.empty()) return 0;
    
//     int count = 1;  // 第一个位置一定是"再创新高"
//     int maxSoFar = a[0];  // 记录到目前为止的最大值
    
//     // 从第二个位置开始遍历
//     for (int i = 1; i < a.size(); i++) {
//         if (a[i] > maxSoFar) {
//             count++;
//             maxSoFar = a[i];
//         }
//     }
    
//     return count;
// }

// int main() {
//     int n;
//     std::cout << "请输入数组长度：";
//     std::cin >> n;

    
//     std::vector<int> a(n);
//     std::cout << "请输入" << n << "个数：";
//     for (int i = 0; i < n; i++) {
//         std::cin >> a[i];
//     }
    
//     int result = countNewHighs(a);
//     std::cout << "再创新高的位置数量为：" << result << std::endl;
    
//     return 0;
// }

#include <iostream>
#include <string>
#include <vector>
#include <algorithm>

std::string findSmallestLexicographical(std::string a, std::string b, 
                                      std::string c, std::string d) {
    // 将四个字符串放入vector中
    std::vector<std::string> strings = {a, b, c, d};
    
    // 对vector进行排序（按字典序）
    std::sort(strings.begin(), strings.end());
    //ccccccejkklijiugihkuhkhfasdfasdDgfadsgafgag
    // 连接排序后的字符串
    std::string result;
    for (const std::string& s : strings) {
        result += s;
    }
    
    return result;
}
int main() {
    std::string a, b, c, d;
    
    std::cout << "请输入四个字符串（每行一个）：\n";
    std::cin >> a >> b >> c >> d;
    
    std::string result = findSmallestLexicographical(a, b, c, d);
    std::cout << "字典序最小的拼接结果是：" << result << std::endl;
    
    return 0;
}
